EC2からCodeCommitを使ったら便利だった
はじめに
CodeCommitを使用すると認証をIAMで行うことができます。
IAMで認証することでEC2でどうしても開発を行いたい場合などに、認証情報をサーバーにおく必要がなくなりとても便利です。 また、SSHの鍵を生成して登録するといった手間も不要になります。
今回はEC2インスタンスでCode CommitにGitでPull、Pushするまでを整理してみます。 今回は基本的に以下の記事を参考にしています。
リポジトリの作成
今回使用するリポジトリをCodeCommitで用意します。
名前はSample
としています。
IAMポリシーとロールの作成
まず初めに以下のようなポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPullAndPush", "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:sample" } ] }
今回はcode-commit
という名前でポリシーを作成しました。
AWSの管理ポリシーでAWSCodeCommitPowerUser
やAWSCodeCommitReadOnly
がありますがこれはもっと広い権限を持っていて、ただPull、Pushしたいだけだと強すぎるので今回は必要最低限の権限のポリシーを作成しています。
これをEC2のインスタンスプロファイルとして使用できるロールにアタッチすれば準備は完了です。
インスタンスプロファイルとして作成したいので一般的なユースケースからEC2を選択します。
先ほど作成したポリシーをアタッチします。
EC2でのGitの設定
CodeCommitを使用する前にGitの設定を行う必要があります。 今回使用しているOSは「Amazon Linux 2(ami-0218d08a1f9dac831)」です。
# Gitのインストール $ sudo yum install git # 認証情報の設定 $ git config --global credential.helper '!aws codecommit credential-helper $@' $ git config --global credential.UseHttpPath true # ユーザー情報の設定 $ git config --global user.email "testuser@example.com" $ git config --global user.name "testuser"
準備ができたので、実際にリポジトリをクローンしてCommit、Pushしてみます。 今回はHTTPでクローンするのでその情報をマネージメントコンソールから取得します。
# リポジトリのクローン $ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample Cloning into 'sample'... warning: You appear to have cloned an empty repository. # Commit $ cd sample $ echo "This is commit from EC2" > README.md $ git add README.md $ git commit -m 'inital commit' # Push $ git push origin master Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 232 bytes | 232.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample * [new branch] master -> master
無事にPushできたみたいなのでWebブラウザで確認してみます。
READMEが追加されています。
感想
わずか数ステップでGitのリモートリポジトリを使用することができました。 IAMロールを使用することで他のインスタンスでも容易にCodeCommitを利用可能です。